package card;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 苏李涛
 * Date: 2024-06-16
 * Time: 18:59
 */
public class ArrayListCard {
    public static final String[] board = new String[] {"♥", "♠", "♣", "♦"};

   public static List<Card> cardsList = new ArrayList<>();


    //给牌初始化，买52张牌

    public List<Card> buyCard() {

        for (int i = 1; i <= 13; i++) {
            for (int j = 0; j < 4; j++) {
                int rank = i;
                //现在数组里面放值，再放到集合中
                String suit = board[j];

                //初始化，构造方法里面的属性
                Card card = new Card(rank, suit);

                //通过，对象（引用的方式），放到集合中
                cardsList.add(card);
            }
        }
        return cardsList;
    }






    //洗牌
    //从后往前遍历
    public List<Card> shuffle (List<Card> cardList) {
        Random random = new Random();
        for (int i = cardList.size()-1; i > 0 ; i--) {
            //获得，生成随机数下标的值
           int pre/*是生成的随机数*/ = random.nextInt(i);//这里会有，开区间数，i(每次遍历的，i下标都是开区间的值)，这个数每次和随机数交换
            swap(pre, cardList, i);
        }
        return cardList;
    }

    private void swap(int j, List<Card> cardList, /*生成随机数，开区间范围的 i*/ int i){

        Card tmp = cardList.get(j);
        cardList.set(j, cardList.get(i));
        cardList.set(i, tmp);

    }







    //揭牌
    public List<List<Card>> playCard(List<Card> cardList) {
        List<List<Card>> ret = new ArrayList<>();//存放一维数组的二维数组


        //下面是三个存放玩家，抽的牌，的一维数组
        List<Card> hand0 = new ArrayList<>();
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();

        ret.add(hand0);
        ret.add(hand1);
        ret.add(hand2);


        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                //因为删除是以覆盖的形式，所以删除一张牌，就会有新的 remove(0)。
                Card card = cardList.remove(0);

                //把覆盖的，牌给到二维数组中，就可以通过二维数组，访问每一个玩家的牌。
                ret.get(j).add(card);
            }
        }
        return ret;
    }
}
